package main

import (
	"fmt"
	"strings"
)

func main() {
	// int类型, int8(-128-127), int16, int32, int64
	// 无符号int类型, uint8(0-255), uint16, uint32, uint64
	//var num int32 = 2000
	//println(num)
	//// unsafe.Sizeof 查看不同类型的整型在内存里面的存储空间
	//println(unsafe.Sizeof(num))
	//// int类型转换
	//var a1 int32 = 12
	//var a2 int64 = 23
	//fmt.Println(a1 + int32(a2))
	//// 数字字面量语法, %d表示i0进制输出, %b表示二进制输出,
	//// %o表示8进制输出, %x表示16进制输出
	//// %v 原样输出
	//fmt.Printf("%v\n", a1)
	//fmt.Printf("%d\n", a1)
	//fmt.Printf("%b\n", a1)
	//fmt.Printf("%o\n", a1)
	//fmt.Printf("%x\n", a1)

	// float类型, float32(32位系统默认), float64(64位系统默认),
	// %.2f 表示保留2位小数输出
	//var a float32 = 3.1415
	//fmt.Printf("值: %v--%.2f, 类型:%T,字节数: %v\n", a, a, a, unsafe.Sizeof(a))
	//// Golang 使用科学计数法表示浮点类型
	//// 表示3.14 * 10的2次方
	//var f2 float32 = 3.14e2
	//fmt.Printf("%v\n", f2)
	//// float精度丢失问题, 使用三方包: decimal解决
	//var f3 float64 = 1129.6
	//// 112959.99999999999
	//fmt.Println(f3 * 100)
	//// int 转 float
	//var i2f = 10
	//println(float32(i2f))

	// bool类型, 数字不能转bool, 不能运行.
	// bool默认值false,(string默认为空, int默认为0, float默认为0)
	//var isTrue bool = false
	//println(isTrue)

	// 字符串
	//var aa string = "aa"
	//println(aa)
	// 转义字符 \ \r \n \t
	//bb := "this \n is \t str"
	//println(bb)
	//str1 := "/test\\aa/\"cc"
	//println(str1)
	//// 多行字符串
	//str2 := `ad
	//		cd
	//		ef`
	//println(str2)
	// 常用操作
	//str3 := "你好"
	//// 6, 一个汉字占用3个字节
	//println(len(str3))
	// 拼接字符串: + 或者 fmt.Springf拼接字符串
	//str1 := "aa"
	//str2 := "bb"
	//println(str1 + str2)
	//println(fmt.Sprintf("%v-%v", str1, str2))
	// 分割/join, strings.Join
	//var str = "123-123-345"
	//arr := strings.Split(str, "-")
	//fmt.Println(arr)
	//str2 := strings.Join(arr, "**")
	//fmt.Println(str2)
	// 切片,数组
	arr := []string{"java", "php", "javascript"}
	fmt.Println(strings.Join(arr, "//"))
	// 包含/index
	fmt.Println(strings.Contains("abc", "bb"))
	fmt.Println(strings.ToTitle("测试一下abc好不好用"))
	fmt.Println(strings.Index("abc", "b"))
	fmt.Println(strings.LastIndex("abcdc", "c"))
}
